草庐IT

c++ getline和stringstream

全部标签

C++ tellg() 不适用于 getline()?

我知道这个标题听起来很疯狂,但我现在正在亲body验这一点,我想不出任何失败的原因。我正在使用getline()读取文件在阅读结束时,我调用了tellg()。但是,此调用总是失败(返回值为-1)。tellg()不能与getline()一起使用是已知问题还是我做错了什么?我用的代码很简单,基本上while(getline(file,line)){//tokenizeanddootherthings}cout有问题的文件是普通磁盘上的一个简单的txt文件,我尝试了一个带和不带CRLF的文件,但没有任何区别。编辑:附加信息gcc/g++4.1.2,Linux(RHEL5)编辑2:根据这个线程

c++ - 子类化 stringstream 给出 "0x401bad ABC"而不是 "Foo ABC"

#include#include#includeclassA:publicstd::stringstream{public:A(){}~A(){std::cout我期待程序打印:FooABC代替0x401badABC为什么打印0x401badABC?g++--versiong++(Ubuntu/Linaro4.6.3-1ubuntu5)4.6.3 最佳答案 operator分两部分实现:字符数据的重载是自由函数。其他重载是std::ostream的成员.我们担心firstone对于那个字符串文字。正如您在链接中看到的,所有重载都采用

c++ - 为什么这个 stringstream 在解析成 double 时会失败?

我有以下代码:#include#include#includeintmain(){size_tx,y;doublea=std::stod("1_",&x);doubleb=std::stod("1i",&y);std::cout>a;s2>>b;std::cout我想解析一个double并在遇到无效字符时停止。在这里,我尝试解析"1_"和"1i",它们都应该给我doublewith值:1。这是我的输出:a:1,x:1b:1,y:1a:1,fail:0b:0,fail:1因此stod函数按预期工作,但stringstream方法没有。标准库中的两种标准double解析方法会给出不同的结果

c++ - cin.getline() 正在跳过 C++ 中的输入

这个问题在这里已经有了答案:Whydoesstd::getline()skipinputafteraformattedextraction?(5个答案)关闭2年前。如果我使用下面的代码,getline不会接受最后的输入(对于“for”循环的最后一次迭代,它只是跳过它)-intmain(){intn;map>lst;stringc,s,c2;cin>>n;for(inti=0;i>s){if(f){c2=s;f=0;}elselst[c2].insert(s);}}for(map>::const_iteratorci=lst.begin();ci!=lst.end();++ci){cou

c++ - stringstream sgetn 在 iOS 5.1 上返回 NULL

我有一个代码可以将std::stringstream的内容复制到char*deststaticsize_tcopyStreamData(std::stringstream&ss,char*const&source,char*dest){ss.str("");ss.clear();sssgetn(dest,(std::numeric_limits::max)());dest[ret]=0;returnret;}在iOS5.0及以下版本中,它按预期工作正常...但在iOS5.1中,它返回NULL。我做错了什么?还有我如何修补我的代码? 最佳答案

java - C++ ifstream.getline() 明显比 Java 的 BufferedReader.readLine() 慢?

我正在重写我的一个Android应用程序以利用NDK,每次它必须做的第一件事就是打开一个1.5MB的文本文件(大约150k行)并将每一行在数据结构中。当我使用Java的BufferedReader.readLine()执行此操作时,从SD卡读取文件大约需要2.5秒。这是我为此使用的代码:try{BufferedReaderbr=newBufferedReader(newFileReader("/sdcard/testfile.txt"));StringthisLine;while((thisLine=br.readLine())!=null){Log.d(TAG,thisLine);}

android - getLine1Number() 不工作

这个问题在这里已经有了答案:MSISDN:IsitaSIMCardData?WhyallTheProvidedFunction(fromBlackberryandAndroid)tofetchMSISDNnotreliable?(3个答案)关闭5年前。我想使用Android获取SIM电话号码,但是当我获取号码​​时,长度为零!这是代码:TelephonyManagermTelephonyMgr=(TelephonyManager)getSystemService(getApplicationContext().TELEPHONY_SERVICE);Strings=mTelephonyM

android - getLine1Number() 返回空白,不为空

这个问题在这里已经有了答案:MSISDN:IsitaSIMCardData?WhyallTheProvidedFunction(fromBlackberryandAndroid)tofetchMSISDNnotreliable?(3个答案)关闭5年前。我想获取设备的手机号码。我使用了以下代码引用AlexVolovoy'sThisLinkTelephonyManagertMgr=(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);StringmPhoneNumber=tMgr.getLine1Number();Log

c++ - 为什么 stringstream 在 cout 时不移动到下一组字符?

stringinputLine="123";stringstreamstream(inputLine);//CaseOneintx,y,z;stream>>x;stream>>y;stream>>z;//x,y,zhavevalues1,2,3//CaseTwocout对于上面的代码,为什么赋值给一个int时,stringstream会移动到下一组字符,而cout却不会?实际代码:我正在使用g++在Mac上编译它#include#include#include#includeusingnamespacestd;intmain(intargc,char*argv[]){stringinp

c++ - 为什么我必须在这里清除 std::stringstream?

我写了一个简短的测试程序,看看我是否可以重复使用stringstream附加到一个字符串。在第一个版本中,我得到了Output1,但我真的不明白为什么s1保持为空。我发现我必须执行ss.clear()然后在Output2中得到预期的结果。任何人都可以解释为什么没有清除它就不起作用吗?我本以为,如果我重复输入数字并将它们取回一个字符串,我应该总是得到数字。我不确定是否附加了数字,但这不是本示例的重点。此处:http://www.cplusplus.com/reference/sstream/stringstream/它说我可以使用任何操作,并且没有限制或要求重置字符串,我可以看到。我也不